home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / oasis / oasisegs.lha / egs / quick.d < prev    next >
Text File  |  1992-04-23  |  966b  |  33 lines

  1. class quick {
  2. method:
  3.     public      run       (int N).
  4.     private     loop      (int J).
  5.                 quick     (int* ?Sorted).
  6.                 sort      (int* Unsorted, ?Sorted, Temp).
  7.                 partition (int* Nums; int Val;
  8.                            int* ?Littles, ?Bigs).
  9. }
  10.  
  11. quick {
  12.     run(N')  |- loop(N).
  13.  
  14.     loop(0).
  15.     loop(J') |- quick(_); loop(J-1).
  16.  
  17.     quick(S) :- sort([27,74,17,33,94,18,46,83,65, 2,
  18.                       32,53,28,85,99,47,28,82, 6,11,
  19.                       55,29,39,81,90,37,10, 0,66,51,
  20.                        7,21,85,27,31,63,75, 4,95,99,
  21.                       11,28,61,74,18,92,40,53,59, 8],S',[]).
  22.  
  23.     sort([],R,R').
  24.     sort([X'|L'],R,R0') |-
  25.             partition(L,X,L1',L2');
  26.             sort(L2,R1',R0);
  27.             sort(L1,R',[X|R1]).
  28.  
  29.     partition([],_,[],[]).
  30.     partition([Y'|L'],X',[Y|L1],L2) :- Y<=X |- partition(L,X,L1',L2').
  31.     partition([Y'|L'],X',L1,[Y|L2]) :- Y> X |- partition(L,X,L1',L2').
  32. }
  33.